package cn.bonoon.kernel.web.annotations.grid;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

/**
 * <pre>
 * 定义列表的项，包括：{@link AsDataGrid}和{@link AsTreeGrid}两种类型的列表
 * <hr/>
 * 可以通过{@link GridOptions}注解里的{@link GridOptions#groups()}定义grid列表的分组
 * 分组是以{@link GridOptions#groups()}定义的下标来分组，本注解指定分组为{@link #group()}
 * 属性，如：group=1，则表示在第一组，第一级是定义在{@link GridOptions#groups()}里的第一个元素
 * 也就是下标为0，可以通过{@link GridOptions#groups() AsGrid.groups()[0]}取得
 * <hr/>
 * 注意：本注解的指定是不会对所注解的字段进行自动转值的，如果需要用到自动转值的，
 * 请使用{@link cn.bonoon.kernel.annotations.TransformField TransformField}和{@link cn.bonoon.kernel.annotations.Transform Transform}
 * </pre>
 * @author jackson
 *
 */
@Target(FIELD)
@Retention(RUNTIME)
public @interface AsColumn {
	int ordinal() default 10;

	String name() default "";

	/**
	 * 
	 * @return
	 */
	int width();

	boolean sortable() default true;

	boolean frozen() default false;

	String align() default "left";

	/**
	 * <pre>
	 * 0表示不属于任何的组
	 * 大于0的表示{@link GridOptions#groups()}注解里定义的位置
	 * </pre>
	 * @return
	 */
	int group() default 0;

	/**
	 * <pre>
	 * 以下来自文档的解释说明：
	 * The cell formatter function, take three parameters:
	 * value: the field value.
	 * rowData: the row record data.
	 * rowIndex: the row index. 
	 * Code example:
	 * <code>
	 * $('#dg').datagrid({
	 * 	columns:[[
	 * 		{field:'userId',title:'User', width:80,
	 * 			formatter: function(value,row,index){
	 * 				if (row.user){
	 * 					return row.user.name;
	 * 				} else {
	 * 					return value;
	 * 				}
	 * 			}
	 * 		}
	 * 	]]
	 * });
	 * </code>
	 * 这里需要指定的是js函数，也可以是直接写函数，格式应该如：
	 * function(value,row,index){
	 * 	//代码
	 * }
	 * </pre>
	 * 
	 * @return
	 */
	String formatter() default "";

	/**
	 * <pre>
	 * 以下来自文档的解释说明：
	 * Indicate the edit type. When string indicates the edit type, when object contains two properties:
	 * type: string, the edit type, possible type is: text,textarea,checkbox,numberbox,validatebox,datebox,combobox,combotree.
	 * options: object, the editor options corresponding to the edit type.
	 * </pre>
	 * <pre>
	 * 如果定义了对行进行编辑，则可以通过双击来进入或退出编辑状态
	 * </pre>
	 * @return
	 */
	String editor() default "";
	
	String styler() default "";
	
	String sorter() default "";
}
